package main

import "fmt"

type Person struct {
	name string //名字
	sex  byte   //性别
	age  int    //年龄
}

//带有接收者的函数叫方法
func (tmp Person) PrintInfo() {
	fmt.Println("tmp = ", tmp)
}

//通过一个函数，给成员赋值
func (p *Person) SetInfo(n string, s byte, a int) {
	p.name = n
	p.sex = s
	p.age = a
}

type long int //可以编译通过

func (tmp long) test() { //可以编译通过

}

type char byte //

func (tmp char) test() { //方法名一样，接收者类型不一样，就是两个不同方法，不会冲突

}

func (tmp *long) test02() { //可以编译通过

}

type pointer *int

//pointer 为接收者类型，它本身是指针类型，
//func (tmp pointer) test() { //编译不通过，接收的类型本身不能是指针或者接口
//}

func main() {
	//定义同时初始化
	p := Person{"mike", 'm', 18}
	p.PrintInfo()
	//定义一个结构体变量
	var p2 Person
	(&p2).SetInfo("yoyo", 'f', 22)
	p2.PrintInfo()
}
